package edu.client;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;

import edu.shared.DTO.ProductoDTO;

public class P_DetalleProducto extends PopupPanel {
	
	private static final int COL_MEDIDA_VARIABLE_1 = 0;
	private static final int COL_MEDIDA_VARIABLE_2 = 1;
	
	FlexTable ftMedidasVariables;
	
	private ProductoDTO producto	;
	
	public P_DetalleProducto(ProductoDTO p) {

		super();
		
		this.producto = p;
		
		setStyleName("fondoPopup");
		
		LayoutPanel panel = new LayoutPanel();
		setWidget(panel);
		panel.setSize("697px", "600px");
		
		Label lblDetalleProducto = new Label("DETALLE DEL PRODUCTO");
		lblDetalleProducto.setStyleName("labelTitulo");
		panel.add(lblDetalleProducto);
		panel.setWidgetLeftWidth(lblDetalleProducto, 2.5, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblDetalleProducto, 15.0, Unit.PX, 50.0, Unit.PX);
		
		//generamos el código del producto
		String codigoProducto = completarCeros(producto.getElemento().getClase().getCodigo()) + "-" + 
								completarCeros(producto.getElemento().getCodigo()) + "-" + 
								completarCeros(producto.getMaterial().getCodigo()) + "-" +
								completarCeros(producto.getMedidaFija().getCodigo());
		
		Label codigoLabel = new Label("CÓDIGO:");
		codigoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		codigoLabel.setStyleName("gwt-LabelFormulario");
		panel.add(codigoLabel);
		panel.setWidgetLeftWidth(codigoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(codigoLabel, 70.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox codigoTB = new TextBox();
		panel.add(codigoTB);
		panel.setWidgetLeftWidth(codigoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(codigoTB, 65.0, Unit.PX, 32.0, Unit.PX);
		codigoTB.setText(codigoProducto);
		codigoTB.setEnabled(false);
		
		Label claseLabel = new Label("CLASE:");
		claseLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		claseLabel.setStyleName("gwt-LabelFormulario");
		panel.add(claseLabel);
		panel.setWidgetLeftWidth(claseLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(claseLabel, 105.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox claseTB = new TextBox();
		panel.add(claseTB);
		panel.setWidgetLeftWidth(claseTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(claseTB, 100.0, Unit.PX, 32.0, Unit.PX);
		claseTB.setText(producto.getElemento().getClase().getNombre());
		claseTB.setEnabled(false);
		
		Label elementoLabel = new Label("ELEMENTO:");
		elementoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		elementoLabel.setStyleName("gwt-LabelFormulario");
		panel.add(elementoLabel);
		panel.setWidgetLeftWidth(elementoLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(elementoLabel, 105.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox elementoTB = new TextBox();
		panel.add(elementoTB);
		panel.setWidgetLeftWidth(elementoTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(elementoTB, 100.0, Unit.PX, 32.0, Unit.PX);
		elementoTB.setText(producto.getElemento().getNombre());
		elementoTB.setEnabled(false);
		
		Label materialLabel = new Label("MATERIAL:");
		materialLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		materialLabel.setStyleName("gwt-LabelFormulario");
		panel.add(materialLabel);
		panel.setWidgetLeftWidth(materialLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(materialLabel, 140.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox materialTB = new TextBox();
		panel.add(materialTB);
		panel.setWidgetLeftWidth(materialTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(materialTB, 135.0, Unit.PX, 32.0, Unit.PX);
		materialTB.setText(producto.getMaterial().getNombre());
		materialTB.setEnabled(false);
		
		Label medidaFijaLabel = new Label("MEDIDA FIJA:");
		medidaFijaLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		medidaFijaLabel.setStyleName("gwt-LabelFormulario");
		panel.add(medidaFijaLabel);
		panel.setWidgetLeftWidth(medidaFijaLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(medidaFijaLabel, 140.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox medidaFijaTB = new TextBox();
		panel.add(medidaFijaTB);
		panel.setWidgetLeftWidth(medidaFijaTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(medidaFijaTB, 135.0, Unit.PX, 32.0, Unit.PX);
		medidaFijaTB.setText(producto.getMedidaFija().getMedida());
		medidaFijaTB.setEnabled(false);
			
		Label lblMedidasVariablesEstandar = new Label("MEDIDAS VARIABLES ESTÁNDAR");
		lblMedidasVariablesEstandar.setStyleName("labelTitulo");
		panel.add(lblMedidasVariablesEstandar);
		panel.setWidgetLeftWidth(lblMedidasVariablesEstandar, 2.5, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblMedidasVariablesEstandar, 170.0, Unit.PX, 50.0, Unit.PX);
		
		ScrollPanel spContactos = new ScrollPanel();
		spContactos.setStyleName("tabla");
		panel.add(spContactos);
		panel.setWidgetLeftWidth(spContactos, 5.0, Unit.PCT, 90.0, Unit.PCT);
		panel.setWidgetTopHeight(spContactos, 240.0, Unit.PX, 250.0, Unit.PX);
		
		ftMedidasVariables = new FlexTable();
		spContactos.setWidget(ftMedidasVariables);
		ftMedidasVariables.setSize("100%", "100%");
		
		//seteamos el encabezado de la tabla
		//columan medida variable 1
		ftMedidasVariables.setText(0, COL_MEDIDA_VARIABLE_1, "MEDIDA VARIABLE 1");
		ftMedidasVariables.getCellFormatter().setWidth(0, COL_MEDIDA_VARIABLE_1, "50%");
		
		//columna medida variable 2
		ftMedidasVariables.setText(0, COL_MEDIDA_VARIABLE_2, "MEDIDA VARIABLE 2");
		ftMedidasVariables.getCellFormatter().setWidth(0, COL_MEDIDA_VARIABLE_2, "50%");
				
		//seteamos el estilo de la tabla
		ftMedidasVariables.getRowFormatter().addStyleName(0, "tablaEncabezado");
		
		Label lblPie = new Label("");
		lblPie.setStyleName("labelTitulo");
		panel.add(lblPie);
		panel.setWidgetLeftWidth(lblPie, 2.5, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblPie, 490.0, Unit.PX, 50.0, Unit.PX);
		
		Button btnSalir = new Button();		
		btnSalir.setText("SALIR");
		
		//cuando se presiona el botón salir
		btnSalir.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
		
		panel.add(btnSalir);
		panel.setWidgetRightWidth(btnSalir, 5.0, Unit.PCT, 10.0, Unit.PCT);
		panel.setWidgetBottomHeight(btnSalir, 15.0, Unit.PX, 28.0, Unit.PX);
		
		cargarTablaMedidasVariables();
	}
			
	/**
	 * Método que carga la tabla de medidas variables estándar del producto
	 */
	private void cargarTablaMedidasVariables()
	{
		for (int i = 0; i < producto.getMedidasEstandar().size(); i++){				
			ftMedidasVariables.setText(i+1, COL_MEDIDA_VARIABLE_1, String.valueOf(producto.getMedidasEstandar().get(i).getMedidaVariable1()));
			ftMedidasVariables.setText(i+1, COL_MEDIDA_VARIABLE_2, String.valueOf(producto.getMedidasEstandar().get(i).getMedidaVariable2()));
			
			ftMedidasVariables.getRowFormatter().setStyleName(i+1, "tablaRenglon");
		}
		
	}
	
	/**
	 * Método que agrega un cero a los códigos de un dígito.
	 * @param codigo. Código original.
	 * @return String. Retorna el código rellenado con el creo, si es necesario.
	 */
	private String completarCeros(int codigo)
	{
		if(codigo < 10)
			return "0"+codigo;
		
		else
			return codigo+"";
	}
	
	/**
	 * Método que cierra el pop up
	 */
	private void salir()
	{
		this.hide();
	}
}